home *** CD-ROM | disk | FTP | other *** search
/ Singles Flirt Up Your Life! (German) / Singles Flirt Up Your Life.iso / data1.cab / Statemachine / playByTableChar.lua < prev    next >
Text File  |  2004-01-29  |  12KB  |  444 lines

  1. beginStateMachine()
  2.     
  3.     onEnter(function(msg)
  4.     
  5.         print("play by table character state machine onEnter ");
  6.         local chair = retrieveStateObject("chair");
  7.         if (not chair) then
  8.             print("playByTableChar::onEnter: no chair");
  9.         end
  10.         --storeStateObject("chair", chair);
  11.         
  12.         if (chair) then
  13.             --chair does exist
  14.             if (getParent().isOneActionPointLocked(chair)) then
  15.                 -- action point is locked
  16.                 getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  17.                 sendMsg("emoThink", getParent().walkSO);
  18.                 exitStateMachine();
  19.             else
  20.                 getParent().lockActionPoints(chair);
  21.                 -- check wich side of chair
  22.                 local actionPointName = retrieveData("chairActionPointName");
  23.                 print("Play by table actionPointName" .. actionPointName);
  24.  
  25.                  if (actionPointName == "sit2") then
  26.                     storeData("mirrorAnims", true);
  27.                 else
  28.                     storeData("mirrorAnims", false);
  29.                 end
  30.                 
  31.             end
  32.         else
  33.             -- chair does not exist anymore
  34.             getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  35.             sendMsg("emoThink", getParent().walkSO);
  36.             exitStateMachine();
  37.         end
  38.     end )
  39.     
  40.     onExit(function(msg)
  41. --        local chair = retrieveStateObject("chair");
  42. --        if (chair) then
  43. --            getParent().unlockActionPoints(chair);
  44. --            getParent().stopAllActivities(boardgame);
  45. --            removeStateObject("chair");
  46. --        end;
  47.         
  48.         local partner = retrieveStateObject("partner");
  49.         if (partner) then
  50.             getParent().unlockActionPoints(partner.getParent());
  51.             getParent().stopAllActivities(partner.getParent());
  52.             removeStateObject("partner");
  53.         end;
  54.                 
  55. --        removeStateObject("table");
  56. --        removeStateObject("boardgame");
  57.         
  58.         unlockAll("chair");        
  59.         unlockAll("table");        
  60.         unlockAll("boardgame");        
  61.                 
  62.     end )
  63.     
  64.     -- sit down on chair
  65.     state("sitDownWithGame")
  66.     
  67.         onEnter(function(msg)
  68.             print("sitDownWithGame onEnter");
  69.             local chair = retrieveStateObject("chair");
  70.             if (not chair) then
  71.                 print("eatByTableChar::sitDown::onEnter: no chair");
  72.             end
  73.             
  74.             setPose("sitdownChair", retrieveData("mirrorAnims"));
  75.                                     
  76.             chair.startAnimation("ChairSitdown");
  77.             chair.playSound("Stuhl hinsetzen");
  78.             -- send a delayed message for sit sound
  79.             sendDelayedMsgThis("sitSound", 2500);
  80.             
  81. --            local boardgame = retrieveStateObject("boardgame");
  82. --                    
  83. --            if (not boardgame) then
  84. --                print("playByTableChar::sitDown::onEnter: no boardgame box");
  85. --            else
  86. --                getParent().detachRightObjectHolder();
  87. --                getParent().detachLeftObjectHolder();                
  88. --                boardgame.deleteGameObject();                                            
  89. --            end
  90.  
  91.             freeHands(getParent());
  92.             
  93.             print("create opened game");
  94.             local boardgame = getParent().loadGameObject("StandardGO","boardgame");
  95.             storeStateObject("boardgame", boardgame);
  96.             
  97.             local table = retrieveStateObject("table");
  98.             local tableActionPointName = retrieveData("tableActionPointName");
  99.             local tableHeight = table.getTableHeight();
  100.             print("tableHeight: " .. tableHeight);
  101.             local tablePos = boardgame.tableYPosition;
  102.             if (not tablePos) then print("WARNING no attribute -tableYPosition- found"); tablePos = 0; end;
  103.             table.addObjectToActionPoint(boardgame, tableActionPointName, 0, tablePos, tableHeight);
  104.             
  105.             
  106.             -- we need free hands for playing
  107.             local hands = getParent().handSO;
  108.             if (not hands) then
  109.                 print("no hands found");
  110.             else
  111.                 hands.stopPose();
  112.             end
  113.                         
  114.             storeData("activePart", true);
  115.  
  116.             
  117.         end )
  118.     
  119.     
  120.         onMsg("queue", function(msg)
  121.             setState("standUp");
  122.         end )        
  123.     
  124.         onMsg("sitSound", function(msg)
  125.             local chair = retrieveStateObject("chair");
  126.             --chair.playSound("Stuhl setzen");
  127.             makeChairSound(chair, "Down");
  128.         end )    
  129.         
  130.         onMsg("act", function(msg)
  131.             doSomething();
  132.             sendDelayedMsgThis("act", 5000);
  133.         end )
  134.         
  135.         onMsg("end", function(msg)
  136.             setCurrentPosition();
  137.             if testCancel() then
  138.                 setState("standUp");
  139.             end
  140.             setState("waitForPartner");
  141.         end )    
  142.         
  143.     -- sit down on chair
  144.     state("sitDown")
  145.     
  146.         onEnter(function(msg)
  147.         
  148.             print("sitDown onEnter");
  149.             local chair = retrieveStateObject("chair");
  150.             if (not chair) then
  151.                 print("playByTableChar::sitDown::onEnter: no chair");
  152.                 exitStateMachine();
  153.                 return
  154.             end
  155.             
  156.             local boardgame = retrieveStateObject("boardgame");
  157.             if (not boardgame) then
  158.                 print("playByTableChar::sitDown::onEnter: no boardgame");
  159.                 exitStateMachine();
  160.                 return
  161.             end
  162.             
  163.             
  164.             setPose("sitdownChair", retrieveData("mirrorAnims"));
  165.                                     
  166.             chair.startAnimation("ChairSitdown");
  167.             chair.playSound("Stuhl hinsetzen");
  168.             -- send a delayed message for sit sound
  169.             sendDelayedMsgThis("sitSound", 2500);
  170.         end )
  171.         
  172.             
  173.         onMsg("sitSound", function(msg)
  174.             local chair = retrieveStateObject("chair");
  175.             --chair.playSound("Stuhl setzen");
  176.             makeChairSound(chair, "Down");
  177.         end )
  178.         
  179.         onMsg("end", function(msg)
  180.             setCurrentPosition();
  181.             if testCancel() then
  182.                 setState("standUp");
  183.                 return
  184.             end
  185.             
  186.             local partner = retrieveStateObject("partner");
  187.             if (not partner) then
  188.                 print("no partner found");
  189.                 return
  190.             end
  191.             sendMsg("partnerReady", partner);
  192.             setState("playSitting");
  193.         end )    
  194.         
  195.         
  196.     state("waitForPartner")
  197.     
  198.         onEnter(function(msg)
  199.             print("waitForPartner onEnter");
  200.                         
  201.             sendDelayedMsgThis("callPartner", 1000);
  202.             sendDelayedMsgThis("stopWaiting", 30000);
  203.         end )
  204.         
  205.         
  206.         onMsg("callPartner", function(msg)
  207.         
  208.             print("callPartner");
  209.             
  210.             if (testCancel()) then
  211.                 sendMsgThis("stopWaiting");
  212.                 return
  213.             end        
  214.             
  215.             
  216.             
  217.             -- get the game object server
  218.             local gameObjectServer = getParent().getGameObjectServer();
  219.  
  220.             
  221.             local partner = getOtherCharacter(getParent());
  222.             
  223.             if (not partner or not isIdle(partner)) then
  224.                 print("waitForPartner: no partner found");
  225.                 getParent().setEmoticon(EMOTICON_NOPARTNER, EMOTICON_DELAY);
  226.                 sendDelayedMsgThis("callPartner", 1000);
  227.                 return
  228.             end
  229.             
  230.             
  231.             local table = retrieveStateObject("table");
  232.             local tableActionPointName = retrieveData("tableActionPointName");
  233.             local partnerChair = getOpposedChair(table, tableActionPointName);
  234.             if (not partnerChair) then
  235.                 print("waitForPartner: no partner chair found");
  236.                 partner.setEmoticon(EMOTICON_NOSEAT, EMOTICON_DELAY);
  237.                 sendDelayedMsgThis("callPartner", 1000);
  238.                 return
  239.             end
  240.             
  241.             local chairActionPoint = partner.getClosestFreeActionPoint(partner, partnerChair, {"sit1", "sit2"});
  242.             if (not chairActionPoint) then
  243.                 print("waitForPartner: partner chair in use TODO: check if partner allready sitting");
  244.                 partner.setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  245.                 sendDelayedMsgThis("callPartner", 1000);
  246.                 return
  247.             end
  248.             
  249.             local wso = partner.walkSO;
  250.             storeStateObject("partner", wso);
  251.             
  252.             
  253.             if (not wso.walkToActionPoint(chairActionPoint)) then
  254.                 print("waitForPartner: partner cant reach chair");
  255.                 partner.setEmoticon(EMOTICON_NOPATH, EMOTICON_DELAY);
  256.                 sendDelayedMsgThis("callPartner", 1000);
  257.                 return
  258.             end
  259.             
  260.             local boardgame = retrieveStateObject("boardgame");
  261.  
  262.             -- create partners state machine contexts
  263.             local wsoContext = StateMachineContext();
  264.             wsoContext.storeStateObject("boardgame", boardgame);
  265.             wsoContext.storeStateObject("chair", partnerChair);
  266.             wsoContext.storeStateObject("partner", this);
  267.             wsoContext.storeData("chairActionPointName", chairActionPoint.getName());
  268.             wsoContext.storeData("activePart", false);
  269.             
  270.             --this.storeData("activePart", true);
  271.  
  272.             -- send partner to chair
  273.             wso.queueStateMachine("playByTableChar.sitDown", this, wsoContext);        
  274.         
  275.         
  276.         end )
  277.         
  278.         
  279.  
  280. --        onMsg("end", function(msg)
  281. --            if (testCancel()) then
  282. --                local partner = retrieveStateObject("partner");
  283. --                sendMsg("partnerStopped", partner);
  284. --                setState("standUp");
  285. --            else
  286. --                if (getParent().isMale()) then
  287. --                    startAnimation("boardgameMike", retrieveData("mirrorAnims"));
  288. --                else
  289. --                    startAnimation("boardgameElaine", retrieveData("mirrorAnims"));
  290. --                end
  291. --            end
  292. --        end )
  293.             
  294.         onMsg("partnerReady", function(msg)
  295.             local partner = retrieveStateObject("partner");
  296.             getParent().replaceQueueEntry(0, "pm_play");
  297.             partner.getParent().pushQueueEntry("pm_play"); 
  298.             setState("playSitting");
  299.             
  300.         end )
  301.         
  302.         onMsg("partnerStopped", function(msg)
  303.             setState("standUp");
  304.         end )        
  305.                 
  306.     
  307.         onMsg("stopWaiting", function(msg)
  308.             print("stopWaiting");
  309.             local partner = retrieveStateObject("partner");
  310.             if (partner) then sendMsg("partnerStopped", partner); end;
  311.             setState("standUp");
  312.         end )        
  313.                 
  314.         onMsg("queue", function(msg)
  315.             local partner = retrieveStateObject("partner");
  316.             if (partner) then sendMsg("partnerStopped", partner); end;
  317.             setState("standUp");
  318.         end )        
  319.         
  320.         
  321.         
  322.         
  323.     state("playSitting")
  324.     
  325.         onEnter(function(msg)
  326.             print("playSitting onEnter");
  327.             
  328.             if (getParent().isMale()) then
  329.                 -- only sent for mike. elaine always has the first turn
  330.                 sendDelayedMsgThis("startLoop", 12000);
  331.             else
  332.                 sendMsgThis("startLoop");
  333.             end
  334.             
  335.                                                 
  336.             local boardgame = retrieveStateObject("boardgame");
  337.             local playBoardgame = getParent().startActivity("playBoardgame", boardgame);
  338.             local length = getActivityLength(playBoardgame);
  339.  
  340.             sendDelayedMsgThis("complete", length);
  341.             sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  342.         end )
  343.         
  344.         onMsg("startLoop", function(msg)
  345.             startAnimation(genderize(getParent(), "boardgame"), retrieveData("mirrorAnims"));
  346.             sendDelayedMsgThis("talk", 12000);
  347.             sendDelayedMsgThis("diceSound", 5600);
  348.             sendDelayedMsgThis("moveSound", 8000);
  349.         end )
  350.         
  351.         onMsg("diceSound", function(msg)
  352.             getParent().playSound("gameDice");
  353.         end )
  354.         
  355.         onMsg("moveSound", function(msg)
  356.             getParent().playSound("gameMove");
  357.         end )
  358.  
  359.         onMsg("talk", function(msg)
  360.             print("talk in wso  " .. getParent().getCharacterName());
  361.             sendMsg("talk", getParent().mimicSO);
  362.             sendDelayedMsgThis("talk", 24000);
  363.         end )
  364.                 
  365.         onMsg("partnerStopped", function(msg)
  366.             print("partnerStopped rec")
  367.             setState("standUp");
  368.         end )        
  369.             
  370.         onMsg("complete", function(msg)
  371.             local partner = retrieveStateObject("partner");
  372.             sendMsg("partnerStopped", partner);
  373.             setState("standUp");
  374.         end )        
  375.             
  376.         onMsg("testCancel", function(msg)
  377.             if testCancel()  or (not this.getParent().getCurrentActivityGain()) then
  378.                 sendMsgThis("complete");
  379.             else
  380.                 sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  381.             end
  382.         end )
  383.                         
  384.     
  385.         onMsg("end", function(msg)
  386.             if (testCancel()) then
  387.                 sendMsgThis("complete");
  388.             else
  389.                 sendMsgThis("startLoop");
  390.             end
  391.         end )    
  392.     
  393.                 
  394.     -- stand up from chair
  395.     state("standUp")
  396.     
  397.         onEnter(function(msg)
  398.         
  399.             print("standUp::onEnter");
  400.         
  401.             startAnimation("standupChair", retrieveData("mirrorAnims"));
  402.             
  403.             sendDelayedMsgThis("upSound", 900);
  404.             
  405.             
  406.             local chair = retrieveStateObject("chair");
  407.             chair.startAnimation("ChairSitdown", -1);
  408.             
  409.             
  410.             
  411.             getParent().detachLeftObjectHolder();
  412.             getParent().detachRightObjectHolder();
  413.                         
  414.             local boardgame = retrieveStateObject("boardgame");
  415.             if (not boardgame) then
  416.                 print("no boardgame to delete found")
  417.             else
  418.                 getParent().stopAllActivities(boardgame);
  419.                 --boardgame.deleteGameObject();
  420.             end
  421.             
  422.         end )
  423.         
  424.         
  425.         onMsg("upSound", function(msg)
  426.             local chair = retrieveStateObject("chair");
  427.             makeChairSound(chair, "Up");
  428.         end )    
  429.     
  430.     
  431.         onMsg("end", function(msg)
  432.         
  433.             if (retrieveData("activePart")) then
  434.                 local boardgame = retrieveStateObject("boardgame");
  435.                 if (boardgame) then
  436.                     boardgame.deleteGameObject();
  437.                 end
  438.             end
  439.             
  440.             setCurrentPosition();
  441.             exitAndGoAway();
  442.         end )    
  443.     
  444. endStateMachine()